﻿using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;

namespace daStaticAnalyser.Analysers
{
    using daStaticAnalyser.Analysers;
    using daStaticAnalyser;
    using daBase.Objects;
    using daBase.Analyser;
    using daSyntaxAnalyser;
    using daSyntaxAnalyser.SyntaxTree;
    using daSyntaxAnalyser.Analysers;

    [AnalyserDefaultSettings("Количество \"физических\" строк кода", "test", 0, "test")]
    class SLOCAnalyzator : BaseStaticAnalyser
    {
        bool CommentSet;

        [Category("Особые")]
        [DisplayName("Количество строк, содержащих комментарий")]
        [Description("Если флаг не установлен, то метрика не выводиться.")]
        public bool IsCommentSet { get { return CommentSet; } set { CommentSet = value; } }
        
        List<String> Files = new List<string>();
        Dictionary<String, int> FileComments = new Dictionary<string, int>();
        //Dictionary<String, int> FileEmpty = new Dictionary<string, int>();
        
        protected override void DoAnalyse(SyntaxTreeArgs e)
        {
            String FileName = e.Element.StartInfo.File;
            if (!Files.Contains(FileName))
            {
                Files.Add(FileName);
                AddMetric("Количество строк",
                          LexicalAnalyser.FileSLOC[FileName],
                          FileName,
                          FileName,
                          1);
            }


            int CountComments;
            if (e.Element.Comments == null) CountComments = 0;
            else CountComments = e.Element.Comments.Count;
            if (!FileComments.ContainsKey(FileName))
            {
                FileComments.Add(FileName, CountComments);
            }
            else
            {
                FileComments[FileName] += CountComments;
            }

            //if (!FileEmpty.ContainsKey(FileName))
            //{
            //    FileEmpty.Add(FileName, LexicalAnalyser.FileEmptyLiles[FileName]);
            //}
        }

        protected override void DoFinishAnalyse(EventArgs e)
        {
            if (CommentSet)
            {
                for (int i = 0; i < Files.Count; ++i)
                {
                    AddMetric("Количество строк, содержащих комментарий",
                              FileComments[Files[i]],
                              Files[i],
                              Files[i],
                              1);
                    //AddMetric("Количество пустых строк",
                    //          FileEmpty[Files[i]],
                    //          Files[i],
                    //          Files[i],
                    //          1);
                }
            }
            Files.Clear();
            FileComments.Clear();
            //FileEmpty.Clear();
        }
    }
}
